如果上傳檔案不想使用 preload 檔案,也不想用下載的方式,其實可以上傳檔案至 selenium grid。
截至寫這篇的時候,Nightwatch.js 其實有 v2 了,不過還是測試版,因此還是分享一下如何撰寫客製化的 command 來上傳檔案
在測試網頁中的上傳檔案一樣是使用 setValue()
的方式,不過如果想把 local 端的檔案上傳上去,可以先透過 zip 的方式將檔案壓縮並轉成 base64 encoded 的 buffer,如此就可以用這串發一個 http request 給遠端的 selenium grid.
const AdmZip = require('adm-zip');
const zip = new AdmZip();
zip.addLocalFile(filePath);
const file = zip.toBuffer().toString('base64');
try {
var returnValue = await this.httpRequest({
path: '/session/:sessionId/file',
sessionId: this.api.sessionId,
data: { file },
method: 'POST',
});
} catch (err) {
console.error('An error occurred uploading file', err);
return {
status: -1,
error: err.message,
};
}
this.
setValue(inputSelector, returnValue.value)